package com.zz.inventory.service.impl;

import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zz.inventory.mapper.UsersMapper;
import com.zz.inventory.domain.Users;
import com.zz.inventory.service.IUsersService;

/**
 * 学校端用户Service业务层处理
 * 
 * @author zz
 * @date 2025-07-01
 */
@Service
public class UsersServiceImpl implements IUsersService 
{
    @Autowired
    private UsersMapper usersMapper;

    /**
     * 查询学校端用户
     * 
     * @param schoolUserId 学校端用户主键
     * @return 学校端用户
     */
    @Override
    public Users selectUsersBySchoolUserId(Long schoolUserId)
    {
        return usersMapper.selectUsersBySchoolUserId(schoolUserId);
    }

    /**
     * 查询学校端用户列表
     * 
     * @param users 学校端用户
     * @return 学校端用户
     */
    @Override
    public List<Users> selectUsersList(Users users)
    {
        return usersMapper.selectUsersList(users);
    }

    /**
     * 新增学校端用户
     * 
     * @param users 学校端用户
     * @return 结果
     */
    @Override
    public int insertUsers(Users users) {
        // 1. 自动生成用户名
        if(users.getEmail() != null) {
            String[] emailParts = users.getEmail().split("@");
            if(emailParts.length == 2) {
                String prefix = emailParts[0];
                String domain = emailParts[1].split("\\.")[0];
                users.setUsername(domain + "_" + prefix);
            }
        }

        // 2. 设置默认密码并加密
        String defaultPassword = "123456";
        String hashedPassword = SecurityUtils.encryptPassword(defaultPassword);
        users.setPasswordHash(hashedPassword);

        // 3. 设置创建时间
        users.setCreateTime(DateUtils.getNowDate());

        // 4. 设置 dept_id（关键修改）
        if (users.getDeptId() == null && users.getSchoolId() != null) {
            // 根据 schoolId 查询对应的 deptId
            Long deptId = usersMapper.findDeptIdBySchoolId(users.getSchoolId());
            users.setDeptId(deptId);
        }

        // 5. 插入用户基本信息
        usersMapper.insertUsers(users);

        // 6. 插入用户角色关联
        Long roleId = null;

        // 6. 插入用户角色关联
        // 如果remark指定了角色，优先使用
        if(users.getRemark() != null && !users.getRemark().isEmpty()) {
            roleId = usersMapper.findRoleIdByName(users.getRemark());
        }
        // 如果没有指定角色或角色不存在，默认使用"普通角色"(role_id=2)
        if(roleId == null) {
            roleId = 2L; // 普通角色的ID
        }
        usersMapper.insertUserRole(users.getSchoolUserId(), roleId);
        return 1;
    }

    /**
     * 修改学校端用户
     * 
     * @param users 学校端用户
     * @return 结果
     */
    @Override
    public int updateUsers(Users users)
    {
        // 如果更新了最后登录时间，格式化为数据库接受的格式
        if(users.getLastLogin() != null) {
            users.setLastLogin(DateUtils.parseDate(users.getLastLogin()));
        }
        return usersMapper.updateUsers(users);
    }

    /**
     * 批量删除学校端用户
     * 
     * @param schoolUserIds 需要删除的学校端用户主键
     * @return 结果
     */
    @Override
    public int deleteUsersBySchoolUserIds(Long[] schoolUserIds)
    {
        return usersMapper.deleteUsersBySchoolUserIds(schoolUserIds);
    }

    /**
     * 删除学校端用户信息
     * 
     * @param schoolUserId 学校端用户主键
     * @return 结果
     */
    @Override
    public int deleteUsersBySchoolUserId(Long schoolUserId)
    {
        return usersMapper.deleteUsersBySchoolUserId(schoolUserId);
    }
}
